/**
 * @Project : algorithm-learning
 * @Author : Ruoyu Wang
 * @User : Momenta
 * @DateTime : 2024/3/21 17:57
 */

//小苯刚刚和怪兽经历了一场恶战，现在血量见底，他面前有n瓶恢复药剂，每瓶药剂都可以为小苯恢复血量，但可能会有副作用，由一对整数(x,y)描述。
//假设小苯使用了一些药剂，则所有使用的药剂中副作用最强的那一瓶会发挥其副作用。
//具体的，如果小苯选择使用了第p1,p2,p3...pk个药剂，则他的血量会增加：\sum_{i=1}^kx_{p_i}-max(y_{p_1},y_{p_2},...,y_{p_k})。
//现在小苯想知道，他以最优方式选择药剂使用（也可以不选），最多可以恢复多少血量，请你帮帮他吧。
//
//输入描述
//输入包含n+1行。
//  第一行一个正整数n(1<=n<=10^5)，表示小苯可以选择的药剂个数。
//  接下来n行，每行两个正整数x,y(1<=x,y<=10^9)，表示每瓶药剂。
//输出描述
//  输出包含一行一个整数表示答案。
//
//示例1
//输入
//4
//1 4
//7 10
//3 8
//2 5
//输出
//3
//说明
//  全部选择使用即最优。(1+7+3+2-10)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    vector<vector<int>> nums(n);
    for (int i = 0; i < n; i++) {
        int a, b;
        scanf("%d%d", &a, &b);
        nums[i].push_back(a);
        nums[i].push_back(b);
    }

    sort(nums.begin(), nums.end(), [](vector<int> a, vector<int> b) { return a[1] < b[1]; });

    int maxn = 0;
    int cur = 0;
    for (int i = 0; i < n; i++) {
        cur += nums[i][0];
        maxn = max(maxn, cur - nums[i][1]);
    }
    printf("%d", maxn);
    return 0;
}